# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素
"""def fun1(para:list or tuple):
    for i in para:
        if para.index(i) % 2 != 0:
            print(i)
fun1([1,2,3,4,5,7,8,9,])"""

# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
"""def fun2(para:str or list or tuple):
    if len(para) > 5:
        print("长度大于5")
    else:
        print("长度小于等于5")

result = list(input("请输入内容："))
fun2(result)
print(result)"""

# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
"""def fun3(para:str):
    n1 = 0 # 数字计数器
    n2 = 0 # 字母计数器
    n3 = 0 # 空格计数器
    n4 = 0 # 其他内容计数器
    for i in para:
        if i in "0123456789":
            n1 += 1
        elif "a" <= i <= "z" or "A" <= i <="Z":
            n2 += 1
        elif i == " ":
            n3 += 1
        else:
            n4 += 1
    print(f"数字的个数是{n1},字母的个数是{n2},空格的个数是{n3},其他内容的个数是{n4}")
result = input("请输入内容：")
fun3(result)"""

# 4、写函数,接收两个数字参数,返回较大的那个数字
"""def fun4(num1,num2):
    if num1 > num2:
        print(f"{num1}大")
    elif num1 < num2:
        print(f"{num2}大")
    else:
        print("一样大")
fun4(7,7)"""

# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
"""def cacluate(*args):
    print(args)
cacluate(1,2,3,"你好",[1,2,3],{"name":"沈腾"})"""

# 6、编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
"""def fun6(para:str):
    n_big = 0 # 大写字母的个数
    n_small = 0 # 小写字母的个数
    for i in para:
        if i in "abcdefghijklmnopqrstuvwxyz":
            n_small += 1
        elif i in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
            n_big += 1
    n_tup = (n_big,n_small)
    print(n_tup)
    print(f"大写字母的个数为{n_tup[0]},小写字母的个数为{n_tup[1]}")
fun6("adf  AAC AA")"""

#7、todo：编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;
"""import random
def fun7(para:list,k):
    list1 = []
    for i in para:
        list1.append(i)
    list1.append(k)
    print(list1)
    print(list1[0:k][::-1] + list1[k:][::-1])
    # print(list1[k:][::-1])
list2 = []
for i in range(30):
    num = random.randint(1,100)
    list2.append(num)
fun7(list2,14)"""

# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
"""def fun8(x,n):
    str1 = ""
    str2 = ""
    sum = 0
    for i in range(n):
        str1 += str(x)
        sum += int(str1)
        if len(str1) < n:
            print(f"{str1} +",end = " ")
            # str2 += str1 + "+" + " "
        else:
            print(f"{str1}")
            # str2 += str1
    return sum
    print(f"上式等于：{sum}")
x = int(input("请输入一个值："))
n = int(input("请输入一个值："))
print(fun8(x, n))"""

# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
"""def fun9(name,age,address,sex="男"):
    print(f"名字是{name}，年龄是{age},地址是{address},性别是{sex}")
fun9("沈腾",22,"齐齐哈尔")"""

# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
"""def fun10(*args):
    sum = 0
    print(args)
    for i in args:
        sum += i
    print(f"这些数字的和是：{sum}")
fun10(1,2,3,4,5,6,7,8,9)"""
"""def sum_n(*n):
    sum = 0
    for i in n:
        sum += i
    return sum
print(sum_n(1, 2, 3, 4, 5, 6))"""

# 11、todo:在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里
"""def fun11(*args):
    print(args)
    pass
fun11("123",[4,5,6],(7,8,9),{10,11,12},{"age":13})"""

# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
"""def fun12(para:list):
    # print(para)
    sum = 0
    str1 = ""
    for i in para:
        sum += 1
        if sum < len(para):
            # print(f"{i}_",end = "")
            str1 += str(i) + "_"
        else:
            # print(f"{i}")
            str1 += str(i)
    return str1
print(fun12([1, 2, 3, 4, 5,6]))"""


# 13、写函数,传入一个数字,返回这个数的阶乘。示例：1x2x3....
# 头昏方法
"""def fun13(num): # 1 * 2 * 3 * 4 * 5 * 6
    result = num
    num1 = num
    for i in range(num):
        if num1 > 1:
            num1 -= 1
            result *= num1
    print(result)
fun13(10)"""
# 优化方法
"""def fun13(num):
    sum1 = 1
    for i in range(num):
        sum1 *= (i+1)
    print(sum1)
    pass
num = int(input("请输入一个数字："))
fun13(num)"""

# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
"""def fun14():
    list_14 = []
    list_f = ["梅花","方块","红桃","黑桃"]
    list_d =["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    for i in list_d:
        for j in list_f:
            list_14.append((j,i))
    print(list_14)
fun14()"""

# 15、编写函数，求1+2+3+…N的和
"""def fun15(num):
    sum1 = 0
    for i in range(num):
        sum1 += (i+1)
    print(sum1)
    pass
num = int(input("请输入一个数字："))
fun15(num)"""

# 16、编写一个函数，求多个数中的最大值
"""def fun16(*args):
    print(args)
    print(max(args))
    pass
fun16(1,2,3,5,12,45,6,52343,3)"""

# 17、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
"""def fun17(para:list):
    str_1 = ""
    for i in para:
        if "a" <= i <= "z" or "A" <= i <= "Z":
            str_1 += str(i)
    print(str_1)
list_1 = list(input("请输入内容："))
fun17(list_1)"""

# 18、写一个函数，求多个数的平均值
"""def fun18(*args:int or float):
    len(args)
    print(f"平均值为{sum(args)/len(args)}")
fun18(1,2,3,4,5,77,99,222.2)"""

# 19、写一个自己的len函数，统计指定序列中元素的个数
"""def mylen(sortQ):
    num = 0
    for i in sortQ:
        num += 1
    print(f"该序列中元素个数为：{num}")
mylen({"name":"沈腾","age":19,"sex":"男"})"""

# 20、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
"""def fun20(seq:list or tuple):
    list_20 = []
    for i in seq:
        if seq.index(i) % 2 == 0:
            list_20.append(i)
    print(list_20)
fun20((1,2,3,"沈腾","马丽"))"""

# 21、水仙花数：个位、十位、百位的立方加在一起等于数的本身
"""def fun21():
    str_21 = ""
    for i in range(100,1000):
        str_21 += str(i)
        # print(str_21)
        # num = i
        # a = int(str_21[2])  # 个位数
        # print(a*a*a)
        if (int(str_21[0])**3 + int(str_21[1])**3 + int(str_21[2])**3) == i:
            print(i)
            str_21 = ""
        else:
            str_21 = ""
fun21()"""

# 22、 定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
# 按照数字的大小，由高到低排序返回
"""import random
def fun22(para:list):
    list22_1 = []
    for i in para:
        if i not in list22_1:
            if i <= 100:
                list22_1.append(i)
            else:
                print("输入的元素值不可以大于100")
                break
    if len(list22_1) > 100:
        list22_1 = list22_1[0:101]
    print(sorted(list22_1,reverse=True))
list22_2 = []
for i in range(123):
    a = random.randint(0,50)
    list22_2.append(a)
fun22(list22_2)"""

# 23、定义函数 getLength，打印用户传入的容器类型和数据长度
"""def getLength(para):
    print(f"容器类型是{type(para)}")
    print(f"数据长度是{len(para)}")
    print(para)
getLength({"name":"沈腾","age":29})"""

# 24、定义函数 generateNum( )
"""def generateNum():
    import random
    print(random.randint(1,100))
generateNum()"""

# 25、定义函数 moreThan(num)，判断输入的数字是否大于1500
"""def moreThan(num):
    if num > 1500:
        print(f"您输入的{num}大于1500")
    elif num < 1500:
        print(f"您输入的{num}小于1500")
    else:
        print(f"您输入的{num}小于1500")
moreThan(1300)"""

# 26、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
"""def fun26(a,b):
    sum = 0;
    for i in range(a+1,b):
        i *= i
        sum += i
    print(f"在{a}和{b}之间的所有数的平方之和是{sum}")
fun26(2,10)"""

# 27、写函数，检查传入字典的每一个value长度，如果大于2，
# 那么仅保留前两个长度的内容， 并将新内容返回给调用者
"""def fun27(para:dict):
    for k,v in para.items():
        str_27 = ""
        if len(str(v)) > 2:
            str_27 = v[0:2]
            para[k] = str_27
        else:
            para[k] = v
    print(para)
fun27({"name":"郝建成","age":19,"address":"辽宁沈阳"})"""

# 28、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
"""def fun28(para:str or list or tuple):
    if len(para) == 0:
        print(f"你输入的{type(para)}对象元素为空！")
    else:
        print(f"您输入的{type(para)}对象元素不为空，为{para}")
fun28("1223你好")"""

# 29、编写自定义函数，完成一个简单的减法运算函数
"""def fun29(a,b):
    print(f"{a}减去{b}等于{a - b}")
fun29(5,1)"""

# 30、编写自定义函数，可以输出自己的名字即可。
"""def myname():
    print("自己的名字！")
myname()"""

# 31、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 1 代表剪刀 2 代表石头 3 代表布
"""def bjc():
    import random
    comp = 100
    user = 100
    while True:
        print("1 代表剪刀 2 代表石头 3 代表布")
        ugame = input("石头剪刀布：")
        cgame = random.randint(1,3)
        if (cgame == 1 and ugame == '3') or (cgame == 2 and ugame == '1') or (cgame == 3 and ugame == '2'):
            user -= 10
            comp += 10
            print("这把你输了")
            print(f"当前用户分数为{user},电脑分数为{comp}")
            if user == 0:
                print("游戏结束，比赛输了")
                break
        elif (ugame == '1' and cgame == 3) or (ugame == '2' and cgame == 1) or (ugame == '3' and cgame == 2):
            user += 10
            comp -= 10
            print("这把你赢了！)
            print(f"当前用户分数为{user},电脑分数为{comp}")
            if user == 200:
                print("游戏结束，赢得比赛")
                break
        else:
            print("这把出的一样，平局")
            print(f"当前用户分数为{user},电脑分数为{comp}")
bjc()
"""

# 32、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
"""def fun32(para:str):
    print(f"您输入的字符串的逆序为{para[::-1]}")
fun32("12abcd99987hkl")"""

# 33、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
"""def fun33(para:list):
    list_33 = []
    for i in para:
        if i % 2 == 0:
            list_33.append(i)
    print(list_33)
fun33([1,2,32,11,22,54,34,66,77,6,5,43])"""

# 34、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
"""def fum34(para:list):
    num1 = 0
    for i in para:
        if num1 < len(i):
            str_34 = ""
            num1 = len(i)
            str_34 += i
    print(f"您传入的列表中，最长的字符串为：{str_34}")
fum34(["沈腾","马丽","开心麻花","艾伦","122324","开心麻花的小品贼拉好看"])"""

# 35、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
"""def fun35(para:list):
    sum = 0
    for i in para:
        i *= i
        sum += i
    print(f"您输入的数字列表中的数字的平方总和为：{sum}")
fun35([1,2,3,4])"""

# 36、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
"""def fun36(para:str):
    str_36 = ""
    para_sp = para.split(" ")
    for i in para_sp:
        str_36 += i.capitalize()
        if para_sp.index(i) < (len(para_sp) - 1):
            str_36 += " "
    print(str_36)
fun36("name age sex address python love and piece")"""

# 37、编写一个函数，接受两个列表作为参数，并返回两个列表的交集
# 举例：
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# 返回：[454]
"""def fun37(a_list:list,b_list:list):
    c_list = []
    for i in a_list:
        if i in b_list:
            c_list.append(i)
    print(f"这两个列表的交集是：{c_list}")
fun37([100,200,300,454],[454,789,125,46])"""

#  38、定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市
"""def enroll():
    a_dict = {}
    while True:
        print("欢迎来到学生注册系统！")
        print("a、输入学生信息","b、查看学生信息","q、退出注册系统",sep = "\n")
        key = input("请选择功能对应序号：")
        if key == "a":
            name = input("请输入姓名：")
            if name not in a_dict:
                age = input("请输入年龄：")
                sex = input("请输入性别：")
                address = input("请输出城市：")
                a_dict[name] = {"年龄":age,"性别":sex,"城市":address}
                print("您已经成功注册！！！")
            else:
                print("您输入的姓名已存在！！！")
        elif key == "b":
            for k,v in a_dict.items():
                print(f"学生姓名是{k},学生信息是{v}")
        else:
            print("感谢使用！！！")
            break
enroll()"""



